package com.project.ds.sqlprovider;

import java.util.Date;

import org.apache.commons.lang3.StringUtils;

import com.dtyunxi.dto.BaseDto;
import com.dtyunxi.util.DateUtil;

/**
 * Mybatis SQL语句工厂类基础接口类
 * @author chen.liangzhen
 * @time 2017年3月29日 下午3:30:14
 */
public class BaseMapperProvider {
	/**
	 * 生成分页的SQL
	 * @author chen.liangzhen
	 * @time 2017年3月29日 下午3:30:01
	 * @version
	 * @param pageSize
	 * @param pageNo
	 * @return
	 */
	public String generatePageSql(int pageSize, int pageNo) {
		StringBuilder sql = new StringBuilder();
		sql.append(" LIMIT ").append((pageNo - 1) * pageSize).append(",").append(pageSize);
		return sql.toString();
	}
	
	/**
	 * 组装时间的过滤条件
	 * @author chen.liangzhen
	 * @time 2017年3月29日 下午3:29:31
	 * @version v0.1.0
	 * @param tableAlias	表的别名
	 * @param dateField		要过滤的字段名
	 * @param beginDate		开始时间
	 * @param endDate		结束时间
	 * @return
	 */
	public String generateDateFilterSql(String tableAlias, String dateField, Date beginDate, Date endDate) {
		endDate = DateUtil.addDay(endDate, 1);
		return " and "+tableAlias+"."+dateField+" BETWEEN '" + DateUtil.format(beginDate, "yyyy-MM-dd") + "' AND '" + DateUtil.format(endDate, "yyyy-MM-dd") + "'";
	}
	
	/**
	 * 组装where过滤条件SQL
		where 1=1
	 * @author chen.liangzhen
	 * @time 2017年3月29日 下午3:29:31
	 * @version v0.1.0
	 * @return
	 */
	public String generateWhereSql() {
		return " where 1=1 and dr=0 ";
	}
	
	/**
	 * 组装排序的SQL
	 * @author chen.liangzhen
	 * @time 2017年3月29日 下午3:29:14
	 * @version v0.1.0
	 * @param orderChars
	 * @return
	 */
	public String generateOrderSql(String orderChars) {
		StringBuilder sql = new StringBuilder();
		sql.append(" order by t.id desc ");
		if(StringUtils.isNotBlank(orderChars)) {
			sql.append(orderChars);
		}
		return sql.toString();
	}
	
	/**
	 * 生成Select的字段累加
	 * @author chen.liangzhen
	 * @time 2017年3月24日 下午12:00:06
	 * @version v0.1.0
	 * @param model
	 * @return
	 * @throws Exception
	 */
	public String generateSelectColumnsName(Class<? extends BaseDto> model) 
			throws Exception{
		BaseDto modelInstance = model.newInstance();
		return modelInstance.returnSelectColumnsName();
	}
}
